c++ 何时使用256初始化数组

cu6pst1q  于 2023-02-01  发布在  其他
关注(0)|答案(5)|浏览(169)

我在浏览破解编码面试书的解决方案时,注意到了以下问题:
实现一个算法来确定一个字符串是否都是唯一的。如果你不能使用额外的数据结构怎么办?
这是提供的解决方案之一:

public static boolean isUniqueChars2(String str) {
  boolean[] char_set = new boolean[256];
    for (int i = 0; i < str.length(); i++) {
      int val = str.charAt(i);
      if (char_set[val]) return false;
      char_set[val] = true;
    }
   return true;
 }

为什么char_set数组的初始化大小是256?我想是因为有128个ASCII字符,但我不确定。另外,这个解决方案似乎是在Java中,但如果是在C++中,初始化大小也是必要的吗?

e37o9pze

e37o9pze1#

我在想,这是因为有128个ASCII字符,但我不确定。
不可以。扩展ASCII码总共有256个字符。这就是为什么有256个字符的原因。
http://www.asciitable.com/
除了256给出的原因外,请注意com/
注意,正如Erwin Bolwidt所说,* 代码在任何情况下都是不完整的,因为Java“字符”既不是ASCII也不是扩展ASCII,它们是“一个16位Unicode字符”,所以数组应该是新的布尔值[65536]*

pod7payv

pod7payv2#

扩展ASCII字符集中有2^8 = 256个字符。
在这里查看。http://www.ascii-code.com/
解答告诉你1和0只能是两个值。这就是为什么它使用了一个布尔型的原始值数组。没有初始化布尔型变量总是FALSE。
C++允许

bool arr[256] = {};

数组的一个很好的例子:

#include <iostream>

using namespace std;

int main()
{
bool test1[16] = { false };
bool test2[16] = { true };
bool test3[16];

cout << "Test1 - Init to false" << endl;
for (size_t i = 0; i < sizeof(test1)/sizeof(test1[0]); ++i)
    cout << test1[i];

cout << endl << "Test2 - Init to true" << endl;
for (size_t i = 0; i < sizeof(test2)/sizeof(test2[0]); ++i)
    cout << test2[i];

cout << endl << "Test3 - Uninitialized" << endl;
for (size_t i = 0; i < sizeof(test3)/sizeof(test3[0]); ++i)
    cout << test3[i];

cout << endl;
}

并给出结果为:

Test1 - Init to false
0000000000000000
Test2 - Init to true
1000000000000000
Test3 - Uninitialized
12024619195255127009671929525512700
j1dl9f46

j1dl9f463#

顺便说一句,代码是Java的。

boolean[] char_set = new boolean[256]

会是

bool* char_set = new bool[256]

在C++中

q7solyqu

q7solyqu4#

另一种方法是蛮力,但它不是最佳解决方案。
可以使用两个for循环,其中外部循环

for(int i=0; i<str.length(); i++)

内部循环就像

for(int j=i+1; j<str.length(); j++)

比较两者的价值会得出答案

if(str.charAt(i) == str.charAt(j))

此外,你可以去检查字母表,如果有一个限制,只检查26个英语字母小a到z或大写A到Z

iklwldmw

iklwldmw5#

    • 扩展ASCII码的数量,总共有256个字符,所以我们只取256个字符
      **

这是与以下内容相关的解决方案之一:

class Solution {
public boolean isAnagram(String s, String t) {
   
   if(s.length() != t.length()) return false;

   int[] arr = new int[256];

   for(int i=0; i<s.length(); i++){
       arr[s.charAt(i)]++;
       arr[t.charAt(i)]--;
   }

   for(int i=0; i<arr.length; i++){
       if(arr[i]!=0){
           return false;
       }
   }
   return true;
}

}

相关问题