最近在看 《程序员面试金典》,感觉书中的一些算法非常的精妙,所以本人对书中的每一个题目都着手实现了一遍,为了以后能够方便的重温这个知识,也为了能够将这个算法分享给 没看过这本书的小伙伴,于是本人决定将这些题目和算法写下来,当然我也只是写下题目和解法,不会对解法进行分析,想看具体分析可以买一本纸质书看一下,非常不错的一本书。
1.1 实现一个算法,确定一个字符串的所有字符是否全都不同。假设不允许使用额外的数据结构,又该如何处理?
public class UniqueCharCheck {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String data = input.nextLine();
boolean result = isUniqueChar(data);
System.out.println(result);
input.close();
}
private static boolean isUniqueChar(String data) {
if (data.length() > 256) // 假设字符是 ASCII 字符
return false;
boolean[] check = new boolean[256];
for (int i = 0; i < data.length(); i++) {
int v = data.charAt(i);
if (check[v])
return false;
check[v] = true;
}
return true;
}
}
1.2 用 C/C++ 实现 void reverse(char* str) 函数,即翻转一个 null 结尾的字符串。
#include<iostream>
using namespace std;
void reverse(char *str);
int main()
{
char s[100];
cin>>s;
reverse(s);
cout<<s<<endl;
return 0;
}
void reverse(char *str)
{
char *end = str;
char *start = str;
while(*end)
++end;
--end;
while(start < end)
{
char temp = *start;
*start++ = *end;
*end-- = temp;
}
return;
}
1.3 给定两个字符串,请编写程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。
public class EqualCheck {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String v = input.nextLine();
String t = input.nextLi